<?php

	$respuestaServidor = array();
	$tiempoEntrada = microtime(true);
	
	// Comprobamos si exisite el parametro de la peticion POST
	//var_dump($_POST);
	if(isset($_POST['solicitud'])){
		$jsonSolicitud = json_decode($_POST['solicitud'], true);
		require_once('db_conectorMySQL.php');
		
		// Nos autentificamos con los datos que nos llegan
		$dbConfiguracion = new DB_ConectorMySQL();
		
		// Vemos si se trata de de una autentificación manual o es la primera autentificación
		if($jsonSolicitud[1]['accion'] == "PrimeraAutentificacion"){
			// Realizamos la consulta
			$resultadoAutentificacionManualOPrimeraAutentificacion = $dbConfiguracion -> esAutentificacionManualOPrimeraAutentificacion($jsonSolicitud[0]['idComercio'], $jsonSolicitud[0]['idTerminal'], $jsonSolicitud[0]['email']);
			$exitoAutentificacionManualOPrimeraAutentificacion = $resultadoAutentificacionManualOPrimeraAutentificacion['exito'];
			
			// Autentificación manual
			if($exitoAutentificacionManualOPrimeraAutentificacion == 1){
				$respuestaServidor['exito'] = 1;
				$respuestaServidor['asunto'] = "AutentificacionManual";
				$respuestaServidor['mensaje'] = "";
				/*
				 * Devolvemos el token password, el pin, y el numero de terminal. Estos dos ultimos sirven por si el usuario
				 * ha desistalado la aplicación y en el servidor ya estaba registrado. Si es una autentificación manual normal
				 * solo se utilizará el tokkenPassword.
				 */
				$respuestaServidor['tokenPassword'] = $resultadoAutentificacionManualOPrimeraAutentificacion['tokenPassword'];
				$respuestaServidor['pin'] = $resultadoAutentificacionManualOPrimeraAutentificacion['pin'];
				$respuestaServidor['numTerminal'] = $resultadoAutentificacionManualOPrimeraAutentificacion['numTerminal'];
				$respuestaServidor['secTicket'] = $resultadoAutentificacionManualOPrimeraAutentificacion['secTicket'];
				
			// Primera autentificación
			}else if($exitoAutentificacionManualOPrimeraAutentificacion == 0){
				$respuestaServidor['exito'] = 1;
				$respuestaServidor['asunto'] = "PrimeraAutentificacion";
				$respuestaServidor['mensaje'] = "Dispositivo registrado correctamente";
				// Devolvemos al terminal los parámetros con los que trabajará
				$respuestaServidor['numTerminal'] =  $resultadoAutentificacionManualOPrimeraAutentificacion['numTerminal'];
				$respuestaServidor['secTicket'] =  $resultadoAutentificacionManualOPrimeraAutentificacion['secTicket'];
				$respuestaServidor['pin'] =  $resultadoAutentificacionManualOPrimeraAutentificacion['pin'];
				$respuestaServidor['tokenPassword'] =  $resultadoAutentificacionManualOPrimeraAutentificacion['tokenPassword'];
				// Mandamos el mail de bienvenida
				require_once('mail.php');
				$mail = new Mail();
				$mail -> enviarMailBienvenidaAutentificado($jsonSolicitud[0]['idComercio'], $jsonSolicitud[0]['email'], $resultadoAutentificacionManualOPrimeraAutentificacion['pin'], $resultadoAutentificacionManualOPrimeraAutentificacion['passwordWeb']);
				
			}else{
				$respuestaServidor['exito'] = 0;
				// Id terminal ya registrado
				if($exitoAutentificacionManualOPrimeraAutentificacion == -1){
					$respuestaServidor['mensaje'] = "Fallo de registro: El dispositivo ya está registrado con otro comercio y no es correcta la autendicicación";
				// Id de comercio no registrado
				}else if($exitoAutentificacionManualOPrimeraAutentificacion == -2){
					$respuestaServidor['mensaje'] = "Fallo de acceso: El identificador de comercio no ha sido registrado";
				// Numero de licencias agotadas
				}else if($exitoAutentificacionManualOPrimeraAutentificacion == -4){
					$respuestaServidor['mensaje'] = "Fallo de registro: El identificador de comercio no tiene licencias disponibles";
				// Numero de licencias agotadas
				}else if($exitoAutentificacionManualOPrimeraAutentificacion == -5){
					$respuestaServidor['mensaje'] = "Fallo de registro: El identificador de comercio ya tiene asociado otro mail con el que realizó el registro del primer dispositivo\nRevise su correo para ver cual era";
				// Error en la consulta
				}else{
					$respuestaServidor['mensaje'] = "Fallo de registro: Error al realizar consultas para registrar un dispositivo";
				}
			}
			
		// Acción distinta a la autentificación manual o primera autentificación
		}else{
			// Nos autentificamos
			$exitoAutentificacion = $dbConfiguracion -> esCorrectaAutentificacion($jsonSolicitud[0]['idComercio'], $jsonSolicitud[0]['idTerminal'], $jsonSolicitud[0]['tokenPassword']);
			
			// Vemos si hemos tenido éxito en la autentifcación
			if($exitoAutentificacion == 1){
				// Vemos el tipo de solicitud
				switch ($jsonSolicitud[1]['accion']) {
					case "ConfirmacionRecepcionTokenPassword":
						$exitoActualizacion = $dbConfiguracion -> actualizarTokenPassword($jsonSolicitud[0]['idComercio'], $jsonSolicitud[0]['idTerminal']);
						if($exitoActualizacion == 0){
							$respuestaServidor['exito'] = 1;
				 			$respuestaServidor['mensaje'] = "Token password actualizado correctamente en el servidor";
						}else{
							$respuestaServidor['exito'] = 0;
				 			$respuestaServidor['mensaje'] = "Error en la actuzalización del token password";
						}
						break;
				    case "DescargarProductos":
						// Creamos el JSON con los productos de ese comercio
						$productosComercio = $dbConfiguracion -> crearJSONProductosComercio($jsonSolicitud[0]['idComercio']);
						// Recogemos el token password siguiente al dispositivo para la siguiente conexión
						$tokenPasswordSig = $dbConfiguracion -> dameTokenPasswordSig($jsonSolicitud[0]['idComercio'], $jsonSolicitud[0]['idTerminal']);				
						$respuestaServidor['exito'] = 1;
				 		$respuestaServidor['mensaje'] = "Productos descargados correctamente";
						$respuestaServidor['respuesta'] = $productosComercio;
						$respuestaServidor['tokenPasswordSig'] = $tokenPasswordSig;
				        break;
				    case "DescargarBDs":
						
						// BD PRODUCTOS
						// Creamos el JSON con los productos de ese comercio
						$productosComercio = $dbConfiguracion -> crearJSONProductosComercio($jsonSolicitud[0]['idComercio']);
						$respuestaServidor['respuesta']['productos'] = $productosComercio;
						
						// BD EMPLEADOS
						// Creamos el JSON con los empleados de ese comercio
						$empleadosComercio = $dbConfiguracion -> crearJSONEmpleadosComercio($jsonSolicitud[0]['idComercio']);
						$respuestaServidor['respuesta']['empleados'] = $empleadosComercio;

						// BD TICKET
						// Creamos el JSON del ticket del comercio
						$empleadosComercio = $dbConfiguracion -> crearJSONTicketComercio($jsonSolicitud[0]['idComercio']);
						$respuestaServidor['respuesta']['ticket'] = $empleadosComercio;

						// Recogemos el token password siguiente al dispositivo para la siguiente conexión
						$tokenPasswordSig = $dbConfiguracion -> dameTokenPasswordSig($jsonSolicitud[0]['idComercio'], $jsonSolicitud[0]['idTerminal']);				
						$respuestaServidor['exito'] = 1;
				 		$respuestaServidor['mensaje'] = "Información actualizada correctamente";
						$respuestaServidor['tokenPasswordSig'] = $tokenPasswordSig;
				        break;
				    case "Autentificacion":
						// Recogemos el token password siguiente al dispositivo para la siguiente conexión
						$tokenPasswordSig = $dbConfiguracion -> dameTokenPasswordSig($jsonSolicitud[0]['idComercio'], $jsonSolicitud[0]['idTerminal']);	
						$respuestaServidor['exito'] = 1;
				 		$respuestaServidor['mensaje'] = "Autentificación realizada con éxito";
						$respuestaServidor['tokenPasswordSig'] = $tokenPasswordSig;
				        break;
				    case "CargarVentas":
				    	// Decodificamos el JSON de los productos vendidos
				    	$productosVentasComercio = $jsonSolicitud[1]['valoresAccion'];
				    	$numTerminal = $jsonSolicitud[0]['numTerminal'];
				    	$secTicket = $jsonSolicitud[0]['secTicket'];
				    	// Actualizamos el secuenciar del terminal
				    	$dbConfiguracion -> actualizarSecuencialTicketTerminal($jsonSolicitud[0]['idComercio'], $secTicket, $numTerminal);
				    	// Cargamos las operaciones
						$dbConfiguracion -> cargarJSONProductosVendidosComercio($productosVentasComercio, $numTerminal);
						// Recogemos el token password siguiente al dispositivo para la siguiente conexión
						$tokenPasswordSig = $dbConfiguracion -> dameTokenPasswordSig($jsonSolicitud[0]['idComercio'], $jsonSolicitud[0]['idTerminal']);				
						$respuestaServidor['exito'] = 1;
				 		$respuestaServidor['mensaje'] = "Productos vendidos cargados correctamente";
						$respuestaServidor['tokenPasswordSig'] = $tokenPasswordSig;
				    	break;
				    case "DescargarVentas":
				    	// Decodificamos el JSON con la informacion de las ventas a descargar
				    	$infoVentasDescargar = $jsonSolicitud[1]['valoresAccion'];
				    	$numTerminal = $jsonSolicitud[0]['numTerminal'];
				    	$secTicket = $jsonSolicitud[0]['secTicket'];
				    	// Actualizamos el secuenciar del terminal
				    	$dbConfiguracion -> actualizarSecuencialTicketTerminal($jsonSolicitud[0]['idComercio'], $secTicket, $numTerminal);
				    	
						$ventasComercio = $dbConfiguracion -> crearJSONProductosVendidosComercio($infoVentasDescargar[0], $numTerminal);
						// Recogemos el token password siguiente al dispositivo para la siguiente conexión
						$tokenPasswordSig = $dbConfiguracion -> dameTokenPasswordSig($jsonSolicitud[0]['idComercio'], $jsonSolicitud[0]['idTerminal']);				
						$respuestaServidor['exito'] = 1;
						if(count($ventasComercio) == 0){
							$respuestaServidor['mensaje'] = "Ninguna venta encontrada";
						}else{
							$respuestaServidor['mensaje'] = count($ventasComercio)." Ventas descargadas correctamente";
						}
				 		$respuestaServidor['respuesta'] = $ventasComercio;
						$respuestaServidor['tokenPasswordSig'] = $tokenPasswordSig;
				    	break;
				    case "EnviarEmailTicket":
				    	require_once('mail.php');
				    	// Decodificamos el JSON con la informacion del ticket
				    	$infoTicket = $jsonSolicitud[1]['valoresAccion'];
						// Mandamos el mail con el ticket
						$respuestaServidor = array();
						// Recogemos el token password siguiente al dispositivo para la siguiente conexión
						$tokenPasswordSig = $dbConfiguracion -> dameTokenPasswordSig($jsonSolicitud[0]['idComercio'], $jsonSolicitud[0]['idTerminal']);				
						$mail = new Mail();
						if($mail -> enviarEmailTicket($infoTicket[0])){
							$respuestaServidor['mensaje'] = "Email enviado correctamente";
							$respuestaServidor['exito'] = 1;
						}else{
							$respuestaServidor['exito'] = 0;
							$respuestaServidor['mensaje'] = "No ha sido posible enviar el email, intentelo de nuevo";
						}
				 		$respuestaServidor['respuesta'] = $respuestaServidor;
						$respuestaServidor['tokenPasswordSig'] = $tokenPasswordSig;
				    	break;
				}
			// El password no es válido
			}else{
				// echo "HOLA";
				// echo $jsonSolicitud[0]['idComercio'];
				$respuestaServidor['exito'] = 0;
				if($exitoAutentificacion == 0){
			 		$respuestaServidor['mensaje'] = "Fallo de autentificación: Token password no válido";
				// No existe el id de comercio o el id de terminal en nuestra BD
				}else if($exitoAutentificacion == -1){
			 		$respuestaServidor['mensaje'] = "Fallo de autentificación: El terminal no ha sido registrado para este comercio";
				}else if($exitoAutentificacion == -2){
			 		$respuestaServidor['mensaje'] = "Fallo de autentificación: El identificador de comercio no ha sido registrado";
				}else{
			 		$respuestaServidor['mensaje'] = "Fallo de autentificación: Error en la consulta de autentificación";
				}
			}
		}
	// Petición al servidor distinta de solicitud
	}else{
		$respuestaServidor['exito'] = 0;
	 	$respuestaServidor['mensaje'] = "Peticion no contemplada al servidor";
	}
	
	$tiempoSalida = microtime(true);
	$respuestaServidor['tiempoEntrada'] = $tiempoEntrada;
	$respuestaServidor['tiempoSalida'] = $tiempoSalida;
	echo json_encode($respuestaServidor);
?>